{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os,sys,inspect\n",
    "currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))\n",
    "parentdir = os.path.dirname(currentdir)\n",
    "sys.path.insert(0,parentdir) \n",
    "\n",
    "from importlib import reload \n",
    "import torch\n",
    "import fasttext\n",
    "from ptb import lang_util\n",
    "import torch\n",
    "from torch.nn import CrossEntropyLoss, NLLLoss\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "NTA = '/Users/jgordon/nta'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "corpus = lang_util.Corpus(NTA + '/datasets/PTB')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Maybe load KN5 model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "kn5 = np.load(NTA + '/datasets/PTB/KN5/kn5D_predictions_82430-089-w.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "word2id = {}\n",
    "remap = np.zeros(10000, dtype=int)\n",
    "with open(NTA + '/datasets/PTB/KN5/ptb_dense_inc_mar8.txt') as f:\n",
    "    i = 0\n",
    "    line = f.readline()\n",
    "    line = f.readline()  # Skip header\n",
    "    while line:\n",
    "        token = line.split()[0]\n",
    "        if token == '<end>':\n",
    "            token = '</s>'\n",
    "        word2id[token] = i\n",
    "        remap[corpus.dictionary.word2idx[token]] = i\n",
    "        i += 1\n",
    "        line = f.readline()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "kn5_tens = torch.tensor(kn5)\n",
    "distrs = (kn5_tens / kn5_tens.sum(1, keepdim=True)).float()\n",
    "kn5_remapped = distrs[:, torch.LongTensor(remap)]\n",
    "torch.save(kn5_remapped, NTA + '/datasets/PTB/KN5/kn5_distr_remapped.pt')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss: 4.966, PPL: 143.41069460658457\n"
     ]
    }
   ],
   "source": [
    "# criterion = CrossEntropyLoss(reduction='mean')\n",
    "criterion = NLLLoss(reduction='mean')\n",
    "   \n",
    "target = []\n",
    "for id in corpus.test:\n",
    "    mapped_id = word2id[corpus.dictionary.idx2word[id]]\n",
    "    target.append(mapped_id)\n",
    "    \n",
    "loss = criterion(distrs.log(), torch.LongTensor(target))\n",
    "total_loss = loss.item()\n",
    "\n",
    "print(\"Loss: %.3f, PPL: %s\" % (total_loss, lang_util.perpl(total_loss)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss: 4.966, PPL: 143.41069460658457\n"
     ]
    }
   ],
   "source": [
    "criterion = NLLLoss(reduction='mean')    \n",
    "loss = criterion(kn5_remapped.log(), torch.LongTensor(corpus.test))\n",
    "total_loss = loss.item()\n",
    "\n",
    "print(\"Loss: %.3f, PPL: %s\" % (total_loss, lang_util.perpl(total_loss)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[0.1048, 0.1051, 0.5019],\n",
      "        [0.1935, 0.7691, 0.6780]])\n",
      "tensor([[0.1048, 0.5019, 0.1051],\n",
      "        [0.1935, 0.6780, 0.7691]])\n"
     ]
    }
   ],
   "source": [
    "a = torch.rand(2, 3)\n",
    "print(a)\n",
    "b = a[:, torch.LongTensor([0, 2, 1])]\n",
    "print(b)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Build RSM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "import rsm_samplers\n",
    "import rsm\n",
    "from ptb import lang_util\n",
    "import rsm_experiment\n",
    "reload(rsm_samplers)\n",
    "reload(rsm)\n",
    "reload(lang_util)\n",
    "reload(rsm_experiment)\n",
    "\n",
    "CONFIG = {\n",
    "    'debug': False,\n",
    "    'path': \"/Users/jgordon/nta/results\",\n",
    "    'data_dir': \"/Users/jgordon/nta/datasets\",\n",
    "    'dataset': 'ptb',\n",
    "    'predictor_hidden_size': 1200,\n",
    "    'predictor_output_size': 10000,\n",
    "    'batch_size': 300,\n",
    "    'batches_in_epoch': 2000,\n",
    "    'batches_in_first_epoch': 2,\n",
    "    'batch_log_interval': 2000,\n",
    "    'vocab_size': 10000,\n",
    "    'eval_interval': 3,\n",
    "    'eval_batch_size': 100,\n",
    "    'eval_batches_in_epoch': 824, #8243,\n",
    "    'learning_rate': 0.0005,\n",
    "    'm_groups': 1500,\n",
    "    'n_cells_per_group': 1,\n",
    "    'k_winners': 80,\n",
    "    'k_winner_cells': 1,\n",
    "    'pred_l2_reg': 0.000001,\n",
    "    'dec_l2_reg': 0.000001,\n",
    "    'input_bias': True,\n",
    "    'eval_interval': 5,\n",
    "    'eps': 0.5,\n",
    "    'gamma': 0.0,\n",
    "    'forget_mu': 0.025,\n",
    "    'weight_sparsity': None,\n",
    "    'mult_integration': False,\n",
    "    'fpartition': None,\n",
    "    'boost_strength': 0.5,\n",
    "    'boost_strength_factor': 0.85,\n",
    "    'boost_strat': 'col_boosting',\n",
    "    'do_inhibition': False,\n",
    "    'x_b_norm': True,\n",
    "    'balance_part_winners': True,\n",
    "    'decode_activation_fn': None,\n",
    "    'decode_bias': False,\n",
    "    'embed_dim': 100,\n",
    "    'input_size': (1, 100),\n",
    "    'output_size': 100,\n",
    "    'embedding_kind': 'ptb_fasttext_e5',\n",
    "    'max_decay': 0.95,\n",
    "    'mem_floor': 0.0005,\n",
    "    'trainable_decay': True,\n",
    "    'word_cache_decay': 0.99,\n",
    "    'kn5_pct': 0.1\n",
    "}\n",
    "    \n",
    "exp = rsm_experiment.RSMExperiment(config=CONFIG)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "setup: Using cpu\n",
      "Maybe download PTB...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loaded embedding dict (ptb_fasttext_e5) with 10000 entries\n",
      "Built dataloaders...\n",
      "Loading from /Users/jgordon/Desktop/rsm_highlights/PTB/RSMTune_0_2019-09-20_21-15-18mchjovgl/checkpoint_112\n"
     ]
    }
   ],
   "source": [
    "exp.model_setup(CONFIG, restore_path=\"/Users/jgordon/Desktop/rsm_highlights/PTB/RSMTune_0_2019-09-20_21-15-18mchjovgl/checkpoint_112\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "wc: 0.03999999910593033, us: 0.0010000000474974513\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 9.000%, pred ppl: 743.5\n",
      "Targ: it  was n't black    monday </s> but while the new   york  stock exchange did n't fall  apart friday as   the \n",
      "Pred: one is  n't expected </s>   </s> the the   the <unk> crowd times exchange is  n't <unk> in    </s>   </s> the \n",
      "{'val_loss': 0.039184603166486164, 'val_interp_ppl': 107.06121567910887, 'val_pred_ppl': 117.15777761373491, 'val_pred_acc': 24.29368932038835}\n",
      "wc: 0.03999999910593033, us: 0.003000000026077032\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 10.000%, pred ppl: 670.9\n",
      "Targ: pit  in   chicago waves of   selling continued to hit stocks themselves on   the big board and  specialists continued to <unk> \n",
      "Pred: </s> </s> N       </s>  </s> the     the       to the the    </s>       </s> the new board </s> the         in        to the   \n",
      "{'val_loss': 0.039181382494788725, 'val_interp_ppl': 107.03257124937855, 'val_pred_ppl': 117.17197209145539, 'val_pred_acc': 24.29247572815534}\n",
      "wc: 0.03999999910593033, us: 0.004999999888241291\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 10.000%, pred ppl: 605.2\n",
      "Targ: friday will undoubtedly cause renewed debate     about whether wall street is properly prepared for another crash situation </s> the big   \n",
      "Pred: </s>   </s> be          be    a       volatility </s>  the     the  street 's <unk>    to       to  the     <unk> </s>      </s> the rumor \n",
      "{'val_loss': 0.03918048901510542, 'val_interp_ppl': 106.97822837013234, 'val_pred_ppl': 117.15409308632434, 'val_pred_acc': 24.29368932038835}\n",
      "wc: 0.03999999910593033, us: 0.007000000216066837\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 10.000%, pred ppl: 602.4\n",
      "Targ: corp. was acquired by australian developer    george <unk>   currently hooker   's   chairman </s> mr. <unk> <unk> to   launch  an ambitious \n",
      "Pred: </s>  and elected  by <unk>      entrepreneur and    gillett </s>      chairman </s> chairman and  mr. <unk> said  will succeed a  offer     \n",
      "{'val_loss': 0.03918117782082951, 'val_interp_ppl': 106.93318175890992, 'val_pred_ppl': 117.11651277100279, 'val_pred_acc': 24.29854368932039}\n",
      "wc: 0.03999999910593033, us: 0.008999999612569809\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 10.000%, pred ppl: 590.0\n",
      "Targ: said </s> a   major     reason is  that investors already have sharply scaled back their purchases of   stock funds since black \n",
      "Pred: </s> </s> the spokesman factor for that the       will    are  a       in     in   to    <unk>     </s> the   in    </s>  the   \n",
      "{'val_loss': 0.039179578929850196, 'val_interp_ppl': 106.93947710466206, 'val_pred_ppl': 117.12931525572999, 'val_pred_acc': 24.300970873786408}\n",
      "wc: 0.03999999910593033, us: 0.010999999940395355\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 10.000%, pred ppl: 638.8\n",
      "Targ: peter <unk> vice president for planning at  the   phoenix ariz.   carrier    said  in  an interview that the work    <unk> at   \n",
      "Pred: in    <unk> N    president of  <unk>    and <unk> <unk>   company investment <unk> the a  interview that it  company force will \n",
      "{'val_loss': 0.03917774543600175, 'val_interp_ppl': 106.90701038718956, 'val_pred_ppl': 117.10076544070915, 'val_pred_acc': 24.30218446601942}\n",
      "wc: 0.03999999910593033, us: 0.013000000268220901\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 10.000%, pred ppl: 671.6\n",
      "Targ: and the   workers ' <unk> with being forced to work      many hours overtime </s> in  separate developments talks have broken \n",
      "Pred: the <unk> <unk>   ' <unk> of   the   <unk>  to subscribe </s> of    </s>     </s> the addition cases        of    with been   \n",
      "{'val_loss': 0.0391835036407252, 'val_interp_ppl': 107.00519472066837, 'val_pred_ppl': 117.20742374700646, 'val_pred_acc': 24.29247572815534}\n",
      "wc: 0.03999999910593033, us: 0.014999999664723873\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 10.000%, pred ppl: 679.0\n",
      "Targ: to   close at $ N in new york stock exchange composite trading </s> <unk> &      broad home       corp.    said   it \n",
      "Pred: </s> N     at N N a  new york stock exchange composite trading </s> the   closed <unk> industries delivery jumped it \n",
      "{'val_loss': 0.03918286766043132, 'val_interp_ppl': 107.03413567202082, 'val_pred_ppl': 117.20362080545257, 'val_pred_acc': 24.29247572815534}\n",
      "wc: 0.03999999910593033, us: 0.017000000923871994\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 10.000%, pred ppl: 700.1\n",
      "Targ: pound last spring have skidded to   between N cents and N cents </s> meanwhile the price of    <unk> the   chemical \n",
      "Pred: year  </s> year   </s> been    </s> N       N N     a   N cents a    the       the <unk> index the   <unk> largest  \n",
      "{'val_loss': 0.03918270423818488, 'val_interp_ppl': 107.02325547010985, 'val_pred_ppl': 117.16524768837635, 'val_pred_acc': 24.29733009708738}\n",
      "wc: 0.03999999910593033, us: 0.01899999938905239\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 10.000%, pred ppl: 684.2\n",
      "Targ: </s> <unk> is   the second-largest propane distributor in    the u.s. </s> the largest suburban propane was   already owned by quantum \n",
      "Pred: yen  the   s.a. a   most           maker   to          maker the u.s. and  the u.s.    producer maker   <unk> N       <unk> by <unk>   \n",
      "{'val_loss': 0.03918260109420974, 'val_interp_ppl': 107.085759140277, 'val_pred_ppl': 117.21620906627719, 'val_pred_acc': 24.29368932038835}\n",
      "wc: 0.05000000074505806, us: 0.0010000000474974513\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 10.000%, pred ppl: 730.3\n",
      "Targ: has had in recent years  </s> the ec      and japan the u.s. 's  largest steel      suppliers have n't  been filling \n",
      "Pred: is  n't a  the    months </s> the company is  the   's  u.s. and largest securities segment   and  been been <unk>   \n",
      "{'val_loss': 0.0391839054363409, 'val_interp_ppl': 106.77574311842667, 'val_pred_ppl': 117.19227435366209, 'val_pred_acc': 24.29733009708738}\n",
      "wc: 0.05000000074505806, us: 0.003000000026077032\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 10.000%, pred ppl: 758.1\n",
      "Targ: clobbered two  years ago in   japan when <unk> introduced a powerful detergent called attack which quickly won  a   N     N \n",
      "Pred: a         </s> years ago </s> the   </s> the   <unk>      a <unk>    <unk>     for    <unk>  on    has     </s> the <unk> N \n",
      "{'val_loss': 0.039184753559258524, 'val_interp_ppl': 106.70573896775164, 'val_pred_ppl': 117.1757804722615, 'val_pred_acc': 24.299757281553397}\n",
      "wc: 0.05000000074505806, us: 0.004999999888241291\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 11.000%, pred ppl: 679.4\n",
      "Targ: and  mrs.  hills </s> many called it  simply a     contrast in styles </s> but some saw it  as a classic \n",
      "Pred: </s> <unk> <unk> </s> the  of     the is     <unk> <unk>    to the    and  the the  of  the 's a <unk>   \n",
      "{'val_loss': 0.039182307924261514, 'val_interp_ppl': 106.6038009345696, 'val_pred_ppl': 117.09304448219557, 'val_pred_acc': 24.303398058252426}\n",
      "wc: 0.05000000074505806, us: 0.007000000216066837\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 670.6\n",
      "Targ: small subsidiary that is  <unk> unrelated becomes a     difficult <unk> said <unk> <unk> president of the parent in a     statement \n",
      "Pred: year  portion    of   has <unk> </s>      to      <unk> <unk>     time  </s> <unk> <unk> a         of the <unk>  of <unk> <unk>     \n",
      "{'val_loss': 0.03918254861011378, 'val_interp_ppl': 106.66099844858812, 'val_pred_ppl': 117.17618762456044, 'val_pred_acc': 24.296116504854368}\n",
      "wc: 0.05000000074505806, us: 0.008999999612569809\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 705.6\n",
      "Targ: plan to press specifically for   a <unk> of               rules governing exports of   machine tools computers and  other high-technology products </s> \n",
      "Pred: are  to buy   the          <unk> a <unk> recapitalization the   </s>      the     </s> the     tools </s>      </s> to    crops           </s>     </s> \n",
      "{'val_loss': 0.039182619234655526, 'val_interp_ppl': 106.64609249490431, 'val_pred_ppl': 117.16795515152494, 'val_pred_acc': 24.30218446601942}\n",
      "wc: 0.05000000074505806, us: 0.010999999940395355\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 697.6\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Targ: corp. and <unk> corp. the successor company to   <unk>       hotels </s> <unk> officials could n't be located </s> financial corp.    \n",
      "Pred: </s>  and <unk> <unk> a   <unk>     of      </s> concentrate the    </s> the   <unk>     said  n't be reached in   <unk>     services \n",
      "{'val_loss': 0.03918287246397615, 'val_interp_ppl': 106.68242691052995, 'val_pred_ppl': 117.20745374250441, 'val_pred_acc': 24.296116504854368}\n",
      "wc: 0.05000000074505806, us: 0.013000000268220901\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 706.0\n",
      "Targ: portions of kansas he   said </s> the soviet  union has n't  given any clear indication of its wheat purchase plans \n",
      "Pred: </s>     of the    </s> said </s> the company union has been yet   the <unk> violation  of the <unk> contract of    \n",
      "{'val_loss': 0.03918740623947052, 'val_interp_ppl': 106.70510302303907, 'val_pred_ppl': 117.23230832351102, 'val_pred_acc': 24.29004854368932}\n",
      "wc: 0.05000000074505806, us: 0.014999999664723873\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 667.2\n",
      "Targ: to shareholders </s> but otherwise it           would undoubtedly come back with an offer by management </s> the executive said any \n",
      "Pred: is be           </s> the the       developments 's    n't         the  to   to   a  <unk> to the        to   the company   said the \n",
      "{'val_loss': 0.03918458810709055, 'val_interp_ppl': 106.66025010910495, 'val_pred_ppl': 117.16310972496667, 'val_pred_acc': 24.29490291262136}\n",
      "wc: 0.05000000074505806, us: 0.017000000923871994\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 684.6\n",
      "Targ: a share up   from the year-earlier $      N million or N cents a share </s> revenue rose to $ N \n",
      "Pred: a share </s> N    $   year-earlier period N million or N cents a share </s> revenue rose N  $ N \n",
      "{'val_loss': 0.03918481884677939, 'val_interp_ppl': 106.76326092241924, 'val_pred_ppl': 117.25518704101735, 'val_pred_acc': 24.28276699029126}\n",
      "wc: 0.05000000074505806, us: 0.01899999938905239\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 691.4\n",
      "Targ: the N        period which was helped by increased ad     spending from the summer olympics </s> while usa today 's total \n",
      "Pred: the previous N      </s>  was N      by the       demand revenue  in   the end    of       </s> the   the 's    's <unk> \n",
      "{'val_loss': 0.039184963224383376, 'val_interp_ppl': 106.77138985699189, 'val_pred_ppl': 117.22897364872006, 'val_pred_acc': 24.283980582524272}\n",
      "wc: 0.05999999865889549, us: 0.0010000000474974513\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 688.1\n",
      "Targ: reason is   mounting competition from new japanese car  plants in   the u.s. that are     pouring out  more than  one million \n",
      "Pred: year   </s> the      a           </s> the york     </s> </s>   </s> the u.s. </s> country <unk>   </s> of   <unk> N   </s>    \n",
      "{'val_loss': 0.03918688932379472, 'val_interp_ppl': 106.61021614923762, 'val_pred_ppl': 117.19555142853538, 'val_pred_acc': 24.28276699029126}\n",
      "wc: 0.05999999865889549, us: 0.003000000026077032\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 681.6\n",
      "Targ: added they hope to have more information early this week </s> investment canada  declined to comment on the reasons for  \n",
      "Pred: the   that were to be   to   of          about </s> year </s> the        bankers 's       to comment on the new     </s> \n",
      "{'val_loss': 0.03918338612680441, 'val_interp_ppl': 106.51594057378325, 'val_pred_ppl': 117.12864473467215, 'val_pred_acc': 24.288834951456312}\n",
      "wc: 0.05999999865889549, us: 0.004999999888241291\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 712.3\n",
      "Targ: new   <unk> <unk> </s> the drug  introduced     last year is  expected to generate sales of about $ N million this \n",
      "Pred: <unk> <unk> </s>  </s> the <unk> administration by   year the expected to be       more  of $     $ N million </s> \n",
      "{'val_loss': 0.03918634114099793, 'val_interp_ppl': 106.57684815145734, 'val_pred_ppl': 117.24959292816658, 'val_pred_acc': 24.280339805825243}\n",
      "wc: 0.05999999865889549, us: 0.007000000216066837\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 721.0\n",
      "Targ: cents a    share on   sales of $ N million </s> the bronx   has  a wonderful <unk> garden a     great <unk> \n",
      "Pred: </s>  </s> share </s> sales of $ N million </s> the company n.y. N <unk>     to    in     <unk> <unk> deal  \n",
      "{'val_loss': 0.03918720897088207, 'val_interp_ppl': 106.57865561495933, 'val_pred_ppl': 117.28050777665858, 'val_pred_acc': 24.281553398058254}\n",
      "wc: 0.05999999865889549, us: 0.008999999612569809\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 703.2\n",
      "Targ: has   avoided all that by  living in    a   long  island  suburb with his wife  who  's    so    <unk> to   soap \n",
      "Pred: <unk> said    the of   the the    <unk> the <unk> history </s>   </s> the <unk> </s> <unk> <unk> <unk> </s> the  \n",
      "{'val_loss': 0.03918464269796477, 'val_interp_ppl': 106.42493939170598, 'val_pred_ppl': 117.11068737304173, 'val_pred_acc': 24.29490291262136}\n",
      "wc: 0.05999999865889549, us: 0.010999999940395355\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 707.2\n",
      "Targ: real  estate <unk>     mr.  crandall <unk> broadly and  said no  comment </s> on  friday morning before the market       's     sell-off \n",
      "Pred: times estate developer </s> <unk>    said  </s>    </s> the  the one     on   the the    the     the    the resignations closed plunge   \n",
      "{'val_loss': 0.039180946780495274, 'val_interp_ppl': 106.51697493506595, 'val_pred_ppl': 117.20762021548725, 'val_pred_acc': 24.29368932038835}\n",
      "wc: 0.05999999865889549, us: 0.013000000268220901\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 683.2\n",
      "Targ: traded over-the-counter </s>   columbia laboratories inc. miami began trading with the symbol <unk> </s>  the pharmaceuticals maker   had traded over-the-counter \n",
      "Pred: a      as               market the      pictures     inc. said  n.j.  a       in   a   new    of    <unk> the <unk>           company of  a      <unk>            \n",
      "{'val_loss': 0.03918161269874104, 'val_interp_ppl': 106.46627910821248, 'val_pred_ppl': 117.13570554828583, 'val_pred_acc': 24.296116504854368}\n",
      "wc: 0.05999999865889549, us: 0.014999999664723873\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 625.3\n",
      "Targ: a    legal <unk>     that they  inherited says prof. <unk> dick  howard of    the university of virginia   law    school but the \n",
      "Pred: </s> year  challenge </s> would can       the  </s>  <unk> <unk> <unk>  <unk> the <unk>      of california school </s>   of  it  \n",
      "{'val_loss': 0.039181437438299646, 'val_interp_ppl': 106.45976629548419, 'val_pred_ppl': 117.12289668263143, 'val_pred_acc': 24.29004854368932}\n",
      "wc: 0.05999999865889549, us: 0.017000000923871994\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 668.4\n",
      "Targ: year    increasing its subscription rates and  cutting back on merchandise <unk> </s> in  an       announcement to   its staff last week \n",
      "Pred: quarter </s>       the N            of    </s> a       the  to the         </s>  </s> the addition interview    that the <unk> to   week \n",
      "{'val_loss': 0.03918245550046123, 'val_interp_ppl': 106.49164453347957, 'val_pred_ppl': 117.14798206906576, 'val_pred_acc': 24.29368932038835}\n",
      "wc: 0.05999999865889549, us: 0.01899999938905239\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 659.3\n",
      "Targ: <unk> by bernard shaw  and  <unk> <unk> a    <unk> former texas judge and   campus beauty queen who   has   never held     \n",
      "Pred: sold  by the     <unk> </s> <unk> <unk> </s> <unk> firm   <unk> <unk> <unk> <unk>  <unk>  </s>  <unk> <unk> been  bothered \n",
      "{'val_loss': 0.03918375370083648, 'val_interp_ppl': 106.51504804089438, 'val_pred_ppl': 117.16378465241245, 'val_pred_acc': 24.29126213592233}\n",
      "wc: 0.07000000029802322, us: 0.0010000000474974513\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 686.7\n",
      "Targ: producer with <unk> <unk> who  notes that <unk> is    <unk> to   his job   </s> the network 's  salaries have always \n",
      "Pred: vice     of   <unk> </s>  </s> is    </s> the   <unk> the   </s> the <unk> </s> the <unk>   was <unk>    of   been   \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'val_loss': 0.039184678892957646, 'val_interp_ppl': 106.55898855023746, 'val_pred_ppl': 117.20649041769856, 'val_pred_acc': 24.288834951456312}\n",
      "wc: 0.07000000029802322, us: 0.003000000026077032\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 630.0\n",
      "Targ: lacked enough financial information about <unk> and  the   <unk> and  sent  the cases  back to federal district court in   dallas \n",
      "Pred: is     up     to        planners    to    the   </s> <unk> <unk> </s> <unk> to  market of   to the     funds    </s>  </s> new    \n",
      "{'val_loss': 0.039184212449540214, 'val_interp_ppl': 106.4742828635311, 'val_pred_ppl': 117.16290708260026, 'val_pred_acc': 24.29368932038835}\n",
      "wc: 0.07000000029802322, us: 0.004999999888241291\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 586.1\n",
      "Targ: <unk> 's   civil war </s> details of the talks described by  a   <unk> official as   very delicate were n't   disclosed \n",
      "Pred: of    </s> <unk> war </s> the     of the <unk> </s>      the the <unk> <unk>    </s> a    <unk>    </s> <unk> <unk>     \n",
      "{'val_loss': 0.03918165288124125, 'val_interp_ppl': 106.45266407108932, 'val_pred_ppl': 117.17384220022109, 'val_pred_acc': 24.296116504854368}\n",
      "wc: 0.07000000029802322, us: 0.007000000216066837\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 622.3\n",
      "Targ: in   world oil     prices sent the index  surging at double-digit annual rates </s> energy prices then plummeted through the summer \n",
      "Pred: </s> the   markets </s>   </s> a   colony of      a  N            </s>   rates for  the    prices rose in        N       the <unk>  \n",
      "{'val_loss': 0.03918007258054556, 'val_interp_ppl': 106.40638887537415, 'val_pred_ppl': 117.13388819283904, 'val_pred_acc': 24.29733009708738}\n",
      "wc: 0.07000000029802322, us: 0.008999999612569809\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 665.8\n",
      "Targ: suspend dividend payments on   its two   classes of   preferred stock indicating that regulators ' concerns  about the troubled institution have \n",
      "Pred: N       the      N        </s> the <unk> million </s> $         stock </s>       a    the        ' syndicate about the company  company     </s> \n",
      "{'val_loss': 0.03917870972106613, 'val_interp_ppl': 106.39840712870219, 'val_pred_ppl': 117.13279515552934, 'val_pred_acc': 24.29733009708738}\n",
      "wc: 0.07000000029802322, us: 0.010999999940395355\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 611.3\n",
      "Targ: while <unk> </s> the woman won the bet   </s>  but perhaps even more   remarkable the  <unk> <unk> <unk> make  a  \n",
      "Pred: </s>  the   </s> the <unk> 's  the <unk> <unk> the the     the  though than       </s> <unk> of    of    <unk> it \n",
      "{'val_loss': 0.03918462630940005, 'val_interp_ppl': 106.38159759290609, 'val_pred_ppl': 117.13772045458028, 'val_pred_acc': 24.29733009708738}\n",
      "wc: 0.07000000029802322, us: 0.013000000268220901\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 599.1\n",
      "Targ: is n't much choice </s> thus europe has begun the recent crusade to produce more worthy shows of  its own   \n",
      "Pred: is a   any  less   </s> the  in     and been  to  <unk>  <unk>   of be      a    than   than  the the <unk> \n",
      "{'val_loss': 0.03918427850562826, 'val_interp_ppl': 106.38822705994346, 'val_pred_ppl': 117.1375044941851, 'val_pred_acc': 24.29247572815534}\n",
      "wc: 0.07000000029802322, us: 0.014999999664723873\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 662.9\n",
      "Targ: fight with <unk> for   ferranti competition is   the   name  of the game  she  said </s> at  least one potential <unk>     \n",
      "Pred: year  </s> the   <unk> the      and         </s> <unk> first of the <unk> </s> says </s> the the   the of        customers \n",
      "{'val_loss': 0.03918483641758127, 'val_interp_ppl': 106.4121099697223, 'val_pred_ppl': 117.13528157424732, 'val_pred_acc': 24.29368932038835}\n",
      "wc: 0.07000000029802322, us: 0.017000000923871994\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 663.0\n",
      "Targ: steel industries inc. expects to report that third-quarter earnings dropped more than N N from the previous quarter as   a \n",
      "Pred: 's    </s>       </s> and     to post   a    third-quarter net      for     N    than N N </s> the previous year    </s> a \n",
      "{'val_loss': 0.03918287033233249, 'val_interp_ppl': 106.48625848828334, 'val_pred_ppl': 117.20206887056716, 'val_pred_acc': 24.288834951456312}\n",
      "wc: 0.07000000029802322, us: 0.01899999938905239\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 640.4\n",
      "Targ: trouble for  software firms generally </s> it  creates uncertainty and   usually <unk> down sales said <unk> <unk> an analyst at   \n",
      "Pred: </s>    </s> the      </s>  </s>      have the 's      a           about <unk>   do    to   the   </s> mr.   <unk> an analyst with \n",
      "{'val_loss': 0.039180360517455534, 'val_interp_ppl': 106.46303349516859, 'val_pred_ppl': 117.15682506744437, 'val_pred_acc': 24.29368932038835}\n",
      "wc: 0.07999999821186066, us: 0.0010000000474974513\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 629.7\n",
      "Targ: in N        N   N     of  those aged     N to   N lived with <unk> other than  spouses down from N N \n",
      "Pred: in addition the years one the   surveyed N days N N     in   N     <unk> <unk> N       </s> from N N \n",
      "{'val_loss': 0.03918534330119496, 'val_interp_ppl': 106.62139605148384, 'val_pred_ppl': 117.20900679051941, 'val_pred_acc': 24.2876213592233}\n",
      "wc: 0.07999999821186066, us: 0.003000000026077032\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 11.000%, pred ppl: 655.4\n",
      "Targ: and  the cheap mixed drinks go   for  $   N a    pop   </s> at  the <unk> manager elizabeth <unk> wo  n't \n",
      "Pred: </s> N   <unk> </s>  </s>   </s> </s> the N </s> pound </s> the the end   <unk>   's        <unk> the n't \n",
      "{'val_loss': 0.03918532447129922, 'val_interp_ppl': 106.47888546782089, 'val_pred_ppl': 117.13212591597828, 'val_pred_acc': 24.29004854368932}\n",
      "wc: 0.07999999821186066, us: 0.004999999888241291\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 11.000%, pred ppl: 663.7\n",
      "Targ: elsewhere <unk> all  critical mention of   group differences </s> as  elizabeth <unk> wrote in the new  york times just before \n",
      "Pred: N         </s>  </s> the      <unk>   </s> the   </s>        </s> the a         <unk> a     a  the u.s. york city  co.  a      \n",
      "{'val_loss': 0.039187726948988956, 'val_interp_ppl': 106.50648665364966, 'val_pred_ppl': 117.19530042103014, 'val_pred_acc': 24.2876213592233}\n",
      "wc: 0.07999999821186066, us: 0.007000000216066837\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 615.0\n",
      "Targ: eric w. <unk> resigned in   june </s> the senate  's     decision to approve a   <unk> deficit-reduction bill without a   capital-gains \n",
      "Pred: vice c. <unk> </s>     </s> the  </s> mr. company passed board    to approve the <unk> amendment         bill that    the bill          \n",
      "{'val_loss': 0.03918255281010733, 'val_interp_ppl': 106.53722645425258, 'val_pred_ppl': 117.24737652242443, 'val_pred_acc': 24.283980582524272}\n",
      "wc: 0.07999999821186066, us: 0.008999999612569809\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 564.4\n",
      "Targ: things had just gone too far  </s> sen. dole  said  that the move  required sacrifice by every senator </s>  it  \n",
      "Pred: in     are been been at  much </s> the  <unk> <unk> the  the <unk> is       to        to the   N       <unk> the \n",
      "{'val_loss': 0.03918188590854768, 'val_interp_ppl': 106.47308704315931, 'val_pred_ppl': 117.18046892835132, 'val_pred_acc': 24.28640776699029}\n",
      "wc: 0.07999999821186066, us: 0.010999999940395355\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 515.1\n",
      "Targ: the new census bureau report <unk> from N   to N are  out of date certainly as   an average for the \n",
      "Pred: N   end york   bureau </s>   </s>  </s> the N  N </s> N   of the  </s>      </s> a  <unk>   of  the \n",
      "{'val_loss': 0.03918131102708358, 'val_interp_ppl': 106.41892661952862, 'val_pred_ppl': 117.11155214695155, 'val_pred_acc': 24.288834951456312}\n",
      "wc: 0.07999999821186066, us: 0.013000000268220901\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 531.2\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Targ: public enthusiasm for  stock mutual funds </s> the main  thing  was portfolio insurance a   mechanical   trading    system intended to protect \n",
      "Pred: </s>   </s>       </s> the   market funds </s> the <unk> reason is  a         the       and money-market investment firm   is       to <unk>   \n",
      "{'val_loss': 0.039182643767771794, 'val_interp_ppl': 106.44453681318785, 'val_pred_ppl': 117.14041808421845, 'val_pred_acc': 24.288834951456312}\n",
      "wc: 0.07999999821186066, us: 0.014999999664723873\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 511.2\n",
      "Targ: do   well during periods of   economic weakness </s> frank <unk> </s> many  people now claim to  have predicted the  N     \n",
      "Pred: </s> n't  </s>   the     </s> the      growth   </s> the   <unk> an   <unk> of     are are   the be   to        that <unk> \n",
      "{'val_loss': 0.039180965985632636, 'val_interp_ppl': 106.44828641047944, 'val_pred_ppl': 117.12969639207364, 'val_pred_acc': 24.29368932038835}\n",
      "wc: 0.07999999821186066, us: 0.017000000923871994\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 559.0\n",
      "Targ: generate </s> the last  time  i            saw a   similar congressional hearing was when <unk> <unk> joe   <unk> did his work  \n",
      "Pred: </s>     </s> the <unk> thing westinghouse was the <unk>   <unk>         hearing is  to   the   with  <unk> <unk> the n't <unk> \n",
      "{'val_loss': 0.03918333676670795, 'val_interp_ppl': 106.45674218567169, 'val_pred_ppl': 117.11403208571853, 'val_pred_acc': 24.29368932038835}\n",
      "wc: 0.07999999821186066, us: 0.01899999938905239\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 556.8\n",
      "Targ: the american stock exchange composite fell    N N     </s> on  oct. N N    the nasdaq composite fell  N points or \n",
      "Pred: N   <unk>    stock exchange </s>      trading N cents to   the the  N </s> of  <unk>  composite index N to     to \n",
      "{'val_loss': 0.03918236835850674, 'val_interp_ppl': 106.58901358652466, 'val_pred_ppl': 117.23424526149532, 'val_pred_acc': 24.281553398058254}\n",
      "wc: 0.09000000357627869, us: 0.0010000000474974513\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 14.000%, pred ppl: 549.4\n",
      "Targ: blocks of N     shares or   more two  years ago  </s> shearson 's     mr. dapuzzo said retail investors nervously sold stock \n",
      "Pred: the    of <unk> and    </s> more </s> years </s> </s> the      lehman mr. <unk>   said the    sales     are       have off   \n",
      "{'val_loss': 0.03918034621306415, 'val_interp_ppl': 106.76469681414598, 'val_pred_ppl': 117.22176789697443, 'val_pred_acc': 24.28276699029126}\n",
      "wc: 0.09000000357627869, us: 0.003000000026077032\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 14.000%, pred ppl: 537.2\n",
      "Targ: month N N N three months N N N six months N N N one year </s> the average of \n",
      "Pred: year  N N N to    months N N N to  months N N N to  year </s> the average of \n",
      "{'val_loss': 0.03918855270208085, 'val_interp_ppl': 106.83501218327437, 'val_pred_ppl': 117.35458443940217, 'val_pred_acc': 24.264563106796118}\n",
      "wc: 0.09000000357627869, us: 0.004999999888241291\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 14.000%, pred ppl: 562.5\n",
      "Targ: and  the   <unk> of computerized program trading </s> the only thing you do  n't have he said is   the portfolio \n",
      "Pred: </s> other <unk> of the          trading trading </s> the big  way   is  're n't want to said </s> n't market    \n",
      "{'val_loss': 0.03918295930528525, 'val_interp_ppl': 106.66562267416963, 'val_pred_ppl': 117.21013709007252, 'val_pred_acc': 24.29126213592233}\n",
      "wc: 0.09000000357627869, us: 0.007000000216066837\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 14.000%, pred ppl: 570.8\n",
      "Targ: republican but   on  friday morning he   had  few  kind words for  president bush 's economic <unk>   </s> there are some \n",
      "Pred: <unk>      <unk> the the    </s>    </s> said been days of    </s> the       bush to <unk>    reforms </s> the   is  no   \n",
      "{'val_loss': 0.039182112199588885, 'val_interp_ppl': 106.60695588274939, 'val_pred_ppl': 117.16593165397586, 'val_pred_acc': 24.29247572815534}\n",
      "wc: 0.09000000357627869, us: 0.008999999612569809\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 15.000%, pred ppl: 520.2\n",
      "Targ: angry over mr. bush      's claim that the capital-gains cut was part of april 's budget  accord and  his insistence \n",
      "Pred: <unk> </s> the bernstein 's <unk> </s> he  <unk>         tax is  n't  of a     N  request </s>   </s> the plan       \n",
      "{'val_loss': 0.039182443474645466, 'val_interp_ppl': 106.58714444450965, 'val_pred_ppl': 117.15980348714949, 'val_pred_acc': 24.2876213592233}\n",
      "wc: 0.09000000357627869, us: 0.010999999940395355\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 15.000%, pred ppl: 486.4\n",
      "Targ: funding group </s> pennsylvania higher education facilities authority </s> $   N million of revenue bonds for    <unk> university series N \n",
      "Pred: funding corp. </s> the          's     interest  services   financing $    the N million of N       bonds series the   and        bonds  N \n",
      "{'val_loss': 0.03917921902792691, 'val_interp_ppl': 106.70642720077983, 'val_pred_ppl': 117.29830142109091, 'val_pred_acc': 24.277912621359224}\n",
      "wc: 0.09000000357627869, us: 0.013000000268220901\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 14.000%, pred ppl: 499.5\n",
      "Targ: following black monday but  mostly through mutual funds </s> discount brokerage customers have been in    the    market somewhat but  not \n",
      "Pred: value     the   &      </s> the    in      the    funds </s> the      yields    firms     were been <unk> recent past   </s>     </s> the \n",
      "{'val_loss': 0.03918539384352857, 'val_interp_ppl': 106.62958199089667, 'val_pred_ppl': 117.19098823684222, 'val_pred_acc': 24.29004854368932}\n",
      "wc: 0.09000000357627869, us: 0.014999999664723873\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 15.000%, pred ppl: 459.4\n",
      "Targ: that demand however has  led  to  a     variety of <unk> </s> making computers smaller often means <unk> memory </s>  it  \n",
      "Pred: N    the    for     </s> been the <unk> <unk>   of the   </s> the    the       and     than  have  that  </s>   chips the \n",
      "{'val_loss': 0.039183836830418234, 'val_interp_ppl': 106.65394769832443, 'val_pred_ppl': 117.20108692523479, 'val_pred_acc': 24.288834951456312}\n",
      "wc: 0.09000000357627869, us: 0.017000000923871994\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 15.000%, pred ppl: 441.6\n",
      "Targ: risen N    N in the first nine months of the  year <unk> both the initial N     N inflation goal set \n",
      "Pred: been  </s> N to the first half months of this year </s>  </s> the <unk>   <unk> N increase  rate of  \n",
      "{'val_loss': 0.03918265680628784, 'val_interp_ppl': 106.73686643838975, 'val_pred_ppl': 117.2763979450769, 'val_pred_acc': 24.28276699029126}\n",
      "wc: 0.09000000357627869, us: 0.01899999938905239\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 15.000%, pred ppl: 432.1\n",
      "Targ: to staying involved in these programs in   which <unk> earn <unk> miles and  <unk> can  get <unk> discounts </s> i   \n",
      "Pred: of the     out      in the   parts    </s> the   they  </s> </s>  </s>  </s> <unk> </s> be  a     </s>      </s> the \n",
      "{'val_loss': 0.03918120817471187, 'val_interp_ppl': 106.66174987456606, 'val_pred_ppl': 117.16552054512954, 'val_pred_acc': 24.288834951456312}\n",
      "wc: 0.10000000149011612, us: 0.0010000000474974513\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 15.000%, pred ppl: 446.7\n",
      "Targ: which analysts say are  roughly three times the price  of a comparable system from tandem </s> obviously ibm can give \n",
      "Pred: </s>  is       say </s> n't     N     times as  market of N N          N      </s> the    </s> the       the 's  be   \n",
      "{'val_loss': 0.03918659020197189, 'val_interp_ppl': 107.00855284957692, 'val_pred_ppl': 117.25612666415459, 'val_pred_acc': 24.274271844660195}\n",
      "wc: 0.10000000149011612, us: 0.003000000026077032\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 15.000%, pred ppl: 457.8\n",
      "Targ: <unk> of   <unk> group a    <unk> <unk> pa.  forecasting company </s> a   lot  of <unk> demand is  gone </s> consumer \n",
      "Pred: </s>  </s> the   <unk> </s> <unk> firm  firm </s>        </s>    </s> the year of <unk> is     for a    at   <unk>    \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'val_loss': 0.03918342698293114, 'val_interp_ppl': 106.94184640103279, 'val_pred_ppl': 117.2446876326732, 'val_pred_acc': 24.277912621359224}\n",
      "wc: 0.10000000149011612, us: 0.004999999888241291\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 16.000%, pred ppl: 449.8\n",
      "Targ: <unk> operations </s> still some         industry giants    are expected to report continuing gains  largely because so much of their business \n",
      "Pred: board </s>       </s> the   westinghouse traders  observers are <unk>    to be     a          growth in      because of far  of the   <unk>    \n",
      "{'val_loss': 0.039184566994098204, 'val_interp_ppl': 106.90379932493839, 'val_pred_ppl': 117.23258107592748, 'val_pred_acc': 24.283980582524272}\n",
      "wc: 0.10000000149011612, us: 0.007000000216066837\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 16.000%, pred ppl: 478.4\n",
      "Targ: the  market 's     afternoon surge   </s> among classes for which   details were available yields ranged from N N or N \n",
      "Pred: </s> end    closed <unk>     session </s> the   the     of  example the     of   suspended for    on     from N N in N \n",
      "{'val_loss': 0.03918376059081514, 'val_interp_ppl': 107.00502649003957, 'val_pred_ppl': 117.36571005585274, 'val_pred_acc': 24.268203883495147}\n",
      "wc: 0.10000000149011612, us: 0.008999999612569809\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 17.000%, pred ppl: 471.9\n",
      "Targ: the  <unk> to require that all employees give similar    notice before they quit </s> <unk> s.    <unk> </s> <unk> comment \n",
      "Pred: </s> <unk> of the     the  the the       '    themselves to     </s>   the  are  </s> the   <unk> <unk> of   the   <unk>   \n",
      "{'val_loss': 0.039186707516969406, 'val_interp_ppl': 106.84732619825515, 'val_pred_ppl': 117.1892260557583, 'val_pred_acc': 24.288834951456312}\n",
      "wc: 0.10000000149011612, us: 0.010999999940395355\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 17.000%, pred ppl: 471.8\n",
      "Targ: N million and would have been much     higher had  not  the  cost  of the trading floor set  been absorbed in   \n",
      "Pred: N million in  N     have a    expected less   than been been <unk> of the company arena </s> up   </s>     </s> \n",
      "{'val_loss': 0.03918537224453051, 'val_interp_ppl': 106.90168323058512, 'val_pred_ppl': 117.25438981987762, 'val_pred_acc': 24.28640776699029}\n",
      "wc: 0.10000000149011612, us: 0.013000000268220901\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 16.000%, pred ppl: 523.5\n",
      "Targ: the <unk>  sale  of farmers to    axa receives regulatory approval </s> a   spokesman for b.a.t said of  the amended filings \n",
      "Pred: the market <unk> is the     <unk> the the      the        capital  </s> the spokesman for the   's   the the company pact    \n",
      "{'val_loss': 0.03918662398275964, 'val_interp_ppl': 106.9479417949018, 'val_pred_ppl': 117.2961740622999, 'val_pred_acc': 24.281553398058254}\n",
      "wc: 0.10000000149011612, us: 0.014999999664723873\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 16.000%, pred ppl: 520.3\n",
      "Targ: and  <unk> marine transportation and  machinery used to make  food  and beverage cans </s> it  was  n't so       long  ago \n",
      "Pred: </s> <unk> </s>   </s>           </s> <unk>     </s> in <unk> <unk> and <unk>    </s> </s> the also a   expected <unk> to  \n",
      "{'val_loss': 0.03918733827552749, 'val_interp_ppl': 106.96319204000281, 'val_pred_ppl': 117.29640152320292, 'val_pred_acc': 24.277912621359224}\n",
      "wc: 0.10000000149011612, us: 0.017000000923871994\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 16.000%, pred ppl: 548.9\n",
      "Targ: after N   p.m   </s> it  is a talk  show with opposition leaders and political experts who  discuss hungary 's domestic \n",
      "Pred: a     the years </s> the 's a <unk> of   that a          to      in  <unk>     <unk>   </s> favor   the     's <unk>    \n",
      "{'val_loss': 0.03918718502775413, 'val_interp_ppl': 106.94104400844789, 'val_pred_ppl': 117.24648295465583, 'val_pred_acc': 24.277912621359224}\n",
      "wc: 0.10000000149011612, us: 0.01899999938905239\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 16.000%, pred ppl: 547.9\n",
      "Targ: up   </s> what better place to turn than sen. edward kennedy 's labor committee that great <unk> of  government <unk> \n",
      "Pred: </s> N    the  's     than  is the  the  the  <unk>  markey  d. <unk> secretary that the   <unk> the the        's    \n",
      "{'val_loss': 0.03918452260708346, 'val_interp_ppl': 106.96401337631389, 'val_pred_ppl': 117.24358166374986, 'val_pred_acc': 24.274271844660195}\n",
      "wc: 0.10999999940395355, us: 0.0010000000474974513\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 16.000%, pred ppl: 580.6\n",
      "Targ: that would be down from the N N rise posted in N   </s> the canadian government announced a new 12-year  \n",
      "Pred: in   's    be a    to   the N N of   in     a  net and  the company  dollar     reported  a N   contract \n",
      "{'val_loss': 0.039187608160150864, 'val_interp_ppl': 107.36065263056908, 'val_pred_ppl': 117.33349762623878, 'val_pred_acc': 24.271844660194176}\n",
      "wc: 0.10999999940395355, us: 0.003000000026077032\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 17.000%, pred ppl: 555.6\n",
      "Targ: service  would get important work done <unk> forest fires    fought housing <unk> students <unk> <unk> centers <unk> </s> there is  \n",
      "Pred: mortgage corp. be  a         for  in   </s>  </s>   products </s>   by      and   </s>     </s>  and   and     </s>  and  the   are \n",
      "{'val_loss': 0.039186348175648054, 'val_interp_ppl': 107.16440374246876, 'val_pred_ppl': 117.16951145151275, 'val_pred_acc': 24.276699029126213}\n",
      "wc: 0.10999999940395355, us: 0.004999999888241291\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 17.000%, pred ppl: 512.0\n",
      "Targ: prudent what 's <unk> he    said </s> when it  was suggested his  comment was  a   <unk> mr.  darman replied it   \n",
      "Pred: N       </s> it the   ratio says </s> the  the 's  a         that first   </s> n't <unk> </s> <unk>  's      that \n",
      "{'val_loss': 0.03918610698570615, 'val_interp_ppl': 107.23538868850225, 'val_pred_ppl': 117.28699289039011, 'val_pred_acc': 24.275485436893202}\n",
      "wc: 0.10999999940395355, us: 0.007000000216066837\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 17.000%, pred ppl: 505.7\n",
      "Targ: awful bear market of   the 1930s began </s> the october <unk> of    N   and N were scary but   did n't \n",
      "Pred: N     </s> </s>   </s> the <unk> </s>  to   in  <unk>   N     <unk> the N   N N    up    about the n't \n",
      "{'val_loss': 0.039187675658432605, 'val_interp_ppl': 107.18521017705773, 'val_pred_ppl': 117.26587014485291, 'val_pred_acc': 24.273058252427184}\n",
      "wc: 0.10999999940395355, us: 0.008999999612569809\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 18.000%, pred ppl: 448.4\n",
      "Targ: game 's   over  and  investors are  about to face a     bear  market </s> david m.    jones vice president at <unk> \n",
      "Pred: </s> </s> <unk> </s> <unk>     </s> <unk> to the  value <unk> </s>   </s> the   <unk> <unk> and  president of <unk> \n",
      "{'val_loss': 0.03918775128544245, 'val_interp_ppl': 107.20919175458047, 'val_pred_ppl': 117.31182753814886, 'val_pred_acc': 24.274271844660195}\n",
      "wc: 0.10999999940395355, us: 0.010999999940395355\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 18.000%, pred ppl: 450.7\n",
      "Targ: that <unk> <unk> is    just one of a   number of <unk>  adopted after the N crash </s> the big   board \n",
      "Pred: in   's    <unk> <unk> a    a   of the <unk>  of people of      by    the N crash and  the <unk> three \n",
      "{'val_loss': 0.03918892366685046, 'val_interp_ppl': 107.20923971929979, 'val_pred_ppl': 117.31020057141569, 'val_pred_acc': 24.264563106796118}\n",
      "wc: 0.10999999940395355, us: 0.013000000268220901\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 18.000%, pred ppl: 477.3\n",
      "Targ: the financial markets to   review its analysis and those of other crash      studies </s> in  may N the working group   \n",
      "Pred: a   new       times   </s> be     the own      of  the   of the   provisions </s>    </s> the the N the number  capital \n",
      "{'val_loss': 0.039186669902387755, 'val_interp_ppl': 107.12169819602481, 'val_pred_ppl': 117.19758819874988, 'val_pred_acc': 24.276699029126213}\n",
      "wc: 0.10999999940395355, us: 0.014999999664723873\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 18.000%, pred ppl: 504.8\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Targ: small wonder that britain 's labor party    wants credit controls </s> a   few   hours after the party launched its own   \n",
      "Pred: in    u.s.   is   's      's <unk> shortage is    to     to       to   the <unk> years of    the <unk> 's       a   <unk> \n",
      "{'val_loss': 0.039187443790758406, 'val_interp_ppl': 107.13105607119975, 'val_pred_ppl': 117.21485626706388, 'val_pred_acc': 24.275485436893202}\n",
      "wc: 0.10999999940395355, us: 0.017000000923871994\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 18.000%, pred ppl: 507.5\n",
      "Targ: rule on   sony 's   renewed request for  a pre-trial order blocking sale of   the disputed products on   which deliveries began \n",
      "Pred: N    </s> a    </s> N       bids    </s> a $         basis </s>     the  </s> $   company  </s>     </s> the   it         </s>  \n",
      "{'val_loss': 0.03918613103281671, 'val_interp_ppl': 107.18672712935758, 'val_pred_ppl': 117.23498746400675, 'val_pred_acc': 24.268203883495147}\n",
      "wc: 0.10999999940395355, us: 0.01899999938905239\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 18.000%, pred ppl: 505.1\n",
      "Targ: </s> dresdner is offering to acquire N   N of <unk> 's    capital  for  N francs  $ N a       share </s> \n",
      "Pred: </s> the      's a        to redeem  the N of the   <unk> ordinary </s> $ million $ N billion share </s> \n",
      "{'val_loss': 0.03918551723246725, 'val_interp_ppl': 107.22081922099939, 'val_pred_ppl': 117.23816122080095, 'val_pred_acc': 24.269417475728154}\n"
     ]
    }
   ],
   "source": [
    "wcs = []\n",
    "uss = []\n",
    "ppls = []\n",
    "\n",
    "WC_DECAY = 0.98\n",
    "\n",
    "for wc in torch.arange(0.04, .11, 0.01):\n",
    "    for us in torch.arange(0.001, 0.02, 0.002):\n",
    "        print(\"wc: %s, us: %s\" % (wc.item(), us.item()))\n",
    "        exp.word_cache_pct = wc.item()\n",
    "        exp.unif_smoothing = us.item()\n",
    "        exp.word_cache_decay = WC_DECAY\n",
    "        ret = exp.eval_epoch(0)\n",
    "        int_ppl = ret['val_interp_ppl']\n",
    "        ppls.append(int_ppl)\n",
    "        wcs.append(wc.item())\n",
    "        uss.append(us.item())\n",
    "        print(ret)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best values cache 0.07000000029802322 unif 0.010999999940395355\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(wcs, uss, c=ppls)\n",
    "plt.xlabel(\"Word Cache\")\n",
    "plt.ylabel(\"Uniform mass\")\n",
    "plt.colorbar()\n",
    "\n",
    "idx = np.argmin(ppls)\n",
    "print(\"Best values\", 'cache', wcs[idx], 'unif', uss[idx])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 14.000%, pred ppl: 526.1\n",
      "Targ: <unk> weekend trying to <unk> out new terms    that would be  more acceptable to   the banks </s> after ual the \n",
      "Pred: year  of      </s>   to <unk> the of  products </s> the   n't a    <unk>      </s> the <unk> </s> the   the 's  \n",
      "{'val_loss': 0.03918219901603258, 'val_interp_ppl': 106.89812567179825, 'val_pred_ppl': 117.22550204933934, 'val_pred_acc': 24.260922330097088}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 14.000%, pred ppl: 517.1\n",
      "Targ: last month </s> <unk> shares fell   nearly N N  on friday to  close at N N </s> ramada which first \n",
      "Pred: </s> week  </s> the   <unk>  closed N      N to to volume the N     at N N </s> the    which has   \n",
      "{'val_loss': 0.03918567364492897, 'val_interp_ppl': 106.82033783646605, 'val_pred_ppl': 117.21013491958131, 'val_pred_acc': 24.25728155339806}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 14.000%, pred ppl: 520.7\n",
      "Targ: peak </s> in  the mid-1980s employment was    down as much as N N from the N        peak and retail sales \n",
      "Pred: </s> </s> the the first     of         report N    N  the  as N N of   the previous N    in  N      sales \n",
      "{'val_loss': 0.039187450196991845, 'val_interp_ppl': 106.75761742318197, 'val_pred_ppl': 117.19568224953717, 'val_pred_acc': 24.263349514563107}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 15.000%, pred ppl: 466.4\n",
      "Targ: said mr.  keating already has conceded attempting to buy influence with the lawmakers democratic sens.   dennis <unk> of   arizona alan \n",
      "Pred: </s> </s> klein   </s>    has been     that       to the the       the  the <unk>     '          leaders <unk>  <unk> </s> the     's   \n",
      "{'val_loss': 0.03918413315601285, 'val_interp_ppl': 106.66910158224292, 'val_pred_ppl': 117.16231898779839, 'val_pred_acc': 24.264563106796118}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 15.000%, pred ppl: 496.1\n",
      "Targ: the senate ethics committee </s> sen. <unk> said when all is  said     and done i  expect to be fully <unk>    \n",
      "Pred: the year   </s>   </s>      </s> the  bob   r.   the  the the expected the the  is 'm     to be a     invested \n",
      "{'val_loss': 0.03918898112402813, 'val_interp_ppl': 106.63420090514275, 'val_pred_ppl': 117.18655776968228, 'val_pred_acc': 24.264563106796118}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 14.000%, pred ppl: 544.7\n",
      "Targ: <unk> the  <unk> plastic <unk> are  based on an  american comic book and  television series </s> paul <unk> managing director \n",
      "Pred: the   </s> u.s.  of      </s>  </s> <unk> on the <unk>    heart of   </s> <unk>      </s>   </s> the  <unk> </s>     director \n",
      "{'val_loss': 0.03918687194965563, 'val_interp_ppl': 106.57584261488773, 'val_pred_ppl': 117.17674159177558, 'val_pred_acc': 24.268203883495147}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 14.000%, pred ppl: 549.2\n",
      "Targ: an   analyst with goldman sachs & co  </s> noting that the third quarter is usually the  aluminum industry 's <unk> \n",
      "Pred: </s> <unk>   </s> <unk>   sachs & co. </s> the    that the issue quarter is n't     been only     company  is <unk> \n",
      "{'val_loss': 0.039182327990646214, 'val_interp_ppl': 106.54667126481266, 'val_pred_ppl': 117.19935710326209, 'val_pred_acc': 24.260922330097088}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 14.000%, pred ppl: 571.6\n",
      "Targ: so   severely as to  be  light years away from the type  of <unk> deals available to sony and  everyone else \n",
      "Pred: </s> far      in the the <unk> </s>  ago  </s> the <unk> of <unk> </s>  </s>      to the  </s> the      </s> \n",
      "{'val_loss': 0.03918631160089258, 'val_interp_ppl': 106.50289021948349, 'val_pred_ppl': 117.16482759956969, 'val_pred_acc': 24.268203883495147}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 15.000%, pred ppl: 535.1\n",
      "Targ: data management equipment </s> the company and  its executives deny the  charges </s> in  a   related   development recognition equipment said \n",
      "Pred: the  </s>       </s>      </s> the company said the board      were that company that the the statement matter      and         to        said \n",
      "{'val_loss': 0.039184529252929014, 'val_interp_ppl': 106.52176926371865, 'val_pred_ppl': 117.24045031284102, 'val_pred_acc': 24.263349514563107}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 15.000%, pred ppl: 497.8\n",
      "Targ: and  the policies of racial <unk> on   all fronts    including the armed struggle </s> and they called on  the government \n",
      "Pred: </s> the u.s.     of the    and   </s> the countries </s>      the <unk> forces   </s> the the  are    the the <unk>      \n",
      "{'val_loss': 0.03918830250634007, 'val_interp_ppl': 106.46071407785384, 'val_pred_ppl': 117.18876642863633, 'val_pred_acc': 24.265776699029125}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 15.000%, pred ppl: 511.3\n",
      "Targ: is  not there in   the market </s> many money    managers and some traders   had already left their offices early friday \n",
      "Pred: was n't a     </s> the past   </s> the  japanese managers are the  investors say been    been to    clients in    in     \n",
      "{'val_loss': 0.03918734072137949, 'val_interp_ppl': 106.47401629202281, 'val_pred_ppl': 117.21854370399015, 'val_pred_acc': 24.260922330097088}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 15.000%, pred ppl: 515.3\n",
      "Targ: j.    phelan said yesterday the  circuit breaker  worked well <unk> </s> i   just  think it   's <unk> at this point \n",
      "Pred: <unk> <unk>  jr.  </s>      that company breakers 's     for  </s>  </s> the think got   that 's going to the  time  \n",
      "{'val_loss': 0.03918354458953209, 'val_interp_ppl': 106.50493929166154, 'val_pred_ppl': 117.21100064488677, 'val_pred_acc': 24.260922330097088}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 15.000%, pred ppl: 544.9\n",
      "Targ: to repay its bank debt and  other obligations resulting from the currently suspended <unk> operations </s> earlier the  company announced \n",
      "Pred: to <unk> $   debt debt </s> to    purposes    </s>      from the company   held      </s>  </s>       </s> the     this company said      \n",
      "{'val_loss': 0.039188942822257, 'val_interp_ppl': 106.5890647082107, 'val_pred_ppl': 117.28762691736209, 'val_pred_acc': 24.25728155339806}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 14.000%, pred ppl: 580.0\n",
      "Targ: N    from N   tons a    year earlier </s> the treasury plans to raise $   N million in new        cash thursday \n",
      "Pred: </s> to   the N    </s> year earlier </s> the company  said  to raise its N billion of short-term debt to       \n",
      "{'val_loss': 0.03918742964460144, 'val_interp_ppl': 106.6894644098836, 'val_pred_ppl': 117.33096137269872, 'val_pred_acc': 24.25121359223301}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 14.000%, pred ppl: 583.3\n",
      "Targ: saturday opened its N     <unk> investor centers across the country </s> the centers normally are   closed through the weekend </s> \n",
      "Pred: a        </s>   the <unk> to    <unk>    </s>    </s>   the bay     </s> the <unk>   are      <unk> <unk>  </s>    the <unk>   to   \n",
      "{'val_loss': 0.03918603574857116, 'val_interp_ppl': 106.67238231760058, 'val_pred_ppl': 117.20015659800414, 'val_pred_acc': 24.266990291262136}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 14.000%, pred ppl: 582.4\n",
      "Targ: n't think  their customers would like it very much </s> america west though is a   smaller airline and therefore more  \n",
      "Pred: n't expect it    <unk>     </s>  be   to </s> much </s> the     's   german it n't <unk>   <unk>   is  the       <unk> \n",
      "{'val_loss': 0.03918418927497945, 'val_interp_ppl': 106.80887710093897, 'val_pred_ppl': 117.20791600405104, 'val_pred_acc': 24.266990291262136}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 641.5\n",
      "Targ: eastern canada and  conventional electric power generating plants  elsewhere including britain where the british government plans to allow limited competition \n",
      "Pred: the     europe </s> the          <unk>    </s>  co         service </s>      </s>      <unk>   's    the u.s.    government and   to build <unk>   partnership \n",
      "{'val_loss': 0.03918821923434734, 'val_interp_ppl': 107.04658392368248, 'val_pred_ppl': 117.25723192629796, 'val_pred_acc': 24.263349514563107}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 614.6\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Targ: buying raw land      while avoiding the negative <unk>  to its own   balance sheet mr.  <unk> said </s> the company is \n",
      "Pred: the    N   materials </s>  the      the u.s.     impact of the <unk> <unk>   sheet </s> <unk> said </s> the company is \n",
      "{'val_loss': 0.039186752507535436, 'val_interp_ppl': 107.2379684851892, 'val_pred_ppl': 117.1961044455846, 'val_pred_acc': 24.266990291262136}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 589.0\n",
      "Targ: expand production capacity </s> a   quick     turnaround is crucial  to quantum because its cash  requirements remain heavy </s>   the company \n",
      "Pred: N      their      </s>     </s> the spokesman <unk>      in expected to the     's      the <unk> flow         </s>   in    volume the company \n",
      "{'val_loss': 0.03918590931701067, 'val_interp_ppl': 107.56778533644885, 'val_pred_ppl': 117.19652486355673, 'val_pred_acc': 24.263349514563107}\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 13.000%, pred ppl: 596.8\n",
      "Targ: down from roughly $ N million last year </s> the spokesman said the broadcast unit  will be <unk> dec. N \n",
      "Pred: </s> from N       N N billion in   year </s> the company   said the company   group is   be <unk> by   N \n",
      "{'val_loss': 0.03918679984675232, 'val_interp_ppl': 108.02005470170103, 'val_pred_ppl': 117.24525004380054, 'val_pred_acc': 24.262135922330096}\n"
     ]
    }
   ],
   "source": [
    "# Tune on decay rate\n",
    "\n",
    "decays = []\n",
    "ppls = []\n",
    "\n",
    "for decay in torch.arange(0.98, .999, 0.001):\n",
    "    exp.word_cache_pct = .07\n",
    "    exp.unif_smoothing = .01\n",
    "    exp.word_cache_decay = decay\n",
    "    ret = exp.eval_epoch(0)\n",
    "    int_ppl = ret['val_interp_ppl']\n",
    "    ppls.append(int_ppl)\n",
    "    decays.append(decay)\n",
    "    print(ret)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best values decay tensor(0.9890)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "plt.plot(decays, ppls)\n",
    "plt.xlabel(\"PPL\")\n",
    "plt.ylabel(\"Decay (word cache)\")\n",
    "\n",
    "idx = np.argmin(ppls)\n",
    "print(\"Best values\", 'decay', decays[idx])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Tune on KN5 pct"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 10.000%, pred ppl: 730.3\n",
      "Targ: has had in recent years  </s> the ec      and japan the u.s. 's  largest steel      suppliers have n't  been filling \n",
      "Pred: is  n't a  the    months </s> the company is  the   's  u.s. and largest securities segment   and  been been <unk>   \n",
      "tensor(0.0050) tensor(0.0200)\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 10.000%, pred ppl: 758.1\n",
      "Targ: clobbered two  years ago in   japan when <unk> introduced a powerful detergent called attack which quickly won  a   N     N \n",
      "Pred: a         </s> years ago </s> the   </s> the   <unk>      a <unk>    <unk>     for    <unk>  on    has     </s> the <unk> N \n",
      "tensor(0.0050) tensor(0.0300)\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 11.000%, pred ppl: 679.4\n",
      "Targ: and  mrs.  hills </s> many called it  simply a     contrast in styles </s> but some saw it  as a classic \n",
      "Pred: </s> <unk> <unk> </s> the  of     the is     <unk> <unk>    to the    and  the the  of  the 's a <unk>   \n",
      "tensor(0.0050) tensor(0.0400)\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 670.6\n",
      "Targ: small subsidiary that is  <unk> unrelated becomes a     difficult <unk> said <unk> <unk> president of the parent in a     statement \n",
      "Pred: year  portion    of   has <unk> </s>      to      <unk> <unk>     time  </s> <unk> <unk> a         of the <unk>  of <unk> <unk>     \n",
      "tensor(0.0050) tensor(0.0500)\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 705.6\n",
      "Targ: plan to press specifically for   a <unk> of               rules governing exports of   machine tools computers and  other high-technology products </s> \n",
      "Pred: are  to buy   the          <unk> a <unk> recapitalization the   </s>      the     </s> the     tools </s>      </s> to    crops           </s>     </s> \n",
      "tensor(0.0050) tensor(0.0600)\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 697.6\n",
      "Targ: corp. and <unk> corp. the successor company to   <unk>       hotels </s> <unk> officials could n't be located </s> financial corp.    \n",
      "Pred: </s>  and <unk> <unk> a   <unk>     of      </s> concentrate the    </s> the   <unk>     said  n't be reached in   <unk>     services \n",
      "tensor(0.0075) tensor(0.0200)\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 706.0\n",
      "Targ: portions of kansas he   said </s> the soviet  union has n't  given any clear indication of its wheat purchase plans \n",
      "Pred: </s>     of the    </s> said </s> the company union has been yet   the <unk> violation  of the <unk> contract of    \n",
      "tensor(0.0075) tensor(0.0300)\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 667.2\n",
      "Targ: to shareholders </s> but otherwise it           would undoubtedly come back with an offer by management </s> the executive said any \n",
      "Pred: is be           </s> the the       developments 's    n't         the  to   to   a  <unk> to the        to   the company   said the \n",
      "tensor(0.0075) tensor(0.0400)\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 684.6\n",
      "Targ: a share up   from the year-earlier $      N million or N cents a share </s> revenue rose to $ N \n",
      "Pred: a share </s> N    $   year-earlier period N million or N cents a share </s> revenue rose N  $ N \n",
      "tensor(0.0075) tensor(0.0500)\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 691.4\n",
      "Targ: the N        period which was helped by increased ad     spending from the summer olympics </s> while usa today 's total \n",
      "Pred: the previous N      </s>  was N      by the       demand revenue  in   the end    of       </s> the   the 's    's <unk> \n",
      "tensor(0.0075) tensor(0.0600)\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 688.1\n",
      "Targ: reason is   mounting competition from new japanese car  plants in   the u.s. that are     pouring out  more than  one million \n",
      "Pred: year   </s> the      a           </s> the york     </s> </s>   </s> the u.s. </s> country <unk>   </s> of   <unk> N   </s>    \n",
      "tensor(0.0100) tensor(0.0200)\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 681.6\n",
      "Targ: added they hope to have more information early this week </s> investment canada  declined to comment on the reasons for  \n",
      "Pred: the   that were to be   to   of          about </s> year </s> the        bankers 's       to comment on the new     </s> \n",
      "tensor(0.0100) tensor(0.0300)\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 712.3\n",
      "Targ: new   <unk> <unk> </s> the drug  introduced     last year is  expected to generate sales of about $ N million this \n",
      "Pred: <unk> <unk> </s>  </s> the <unk> administration by   year the expected to be       more  of $     $ N million </s> \n",
      "tensor(0.0100) tensor(0.0400)\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 721.0\n",
      "Targ: cents a    share on   sales of $ N million </s> the bronx   has  a wonderful <unk> garden a     great <unk> \n",
      "Pred: </s>  </s> share </s> sales of $ N million </s> the company n.y. N <unk>     to    in     <unk> <unk> deal  \n",
      "tensor(0.0100) tensor(0.0500)\n",
      "Evaluating...\n",
      "Finished batch 0\n",
      "Partial pred acc - batch acc: 12.000%, pred ppl: 703.2\n",
      "Targ: has   avoided all that by  living in    a   long  island  suburb with his wife  who  's    so    <unk> to   soap \n",
      "Pred: <unk> said    the of   the the    <unk> the <unk> history </s>   </s> the <unk> </s> <unk> <unk> <unk> </s> the  \n"
     ]
    }
   ],
   "source": [
    "# Tune on decay rate\n",
    "\n",
    "kn5_pcts = []\n",
    "wcs = []\n",
    "ppls = []\n",
    "\n",
    "for kn5_pct in torch.arange(0.005, .015, .0025):\n",
    "    for wc in torch.arange(0.02, .07, .01):\n",
    "        exp.word_cache_pct = .07\n",
    "        exp.unif_smoothing = 0\n",
    "        exp.kn5_pct = kn5_pct\n",
    "        ret = exp.eval_epoch(0)\n",
    "        int_ppl = ret['val_interp_ppl']\n",
    "        wcs.append(wc)\n",
    "        ppls.append(int_ppl)\n",
    "        kn5_pcts.append(kn5_pct)\n",
    "        print(kn5_pct, wc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best values kn5 tensor(0.0100)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "plt.plot(kn5_pcts, ppls)\n",
    "plt.xlabel(\"PPL\")\n",
    "plt.ylabel(\"KN5 pct\")\n",
    "\n",
    "idx = np.argmin(ppls)\n",
    "print(\"Best values\", 'kn5', kn5_pcts[idx])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
